package d4_homework;

import java.io.*;

public class ThirdQuestion {
    public static void main(String[] args) throws Exception {
        //目标: 能能够使用递归调用定义的方法,搜索文件夹, 完成渎职指定类型的文件到文件夹中
        File file = new File("D:\\javadevelop\\2024班\\陈某");
        File dir = new File("D:\\javadevelop\\2024班\\陈平安\\");
        String name = "陈某";
        searchFile(file, dir,name);

    }

    //独立功能独立成方法
    public static void searchFile(File file, File dir, String fileName) throws Exception {
        //1、做出极端判断
        if (file == null || !file.exists() || dir == null
                || !dir.exists() || file.isFile() || dir.isFile()) {
            //直接进行进行打回
            return;
        }

        //2、在目标文件夹位置创建文件夹
//        File newDir = new File(dir, file.getName());
//        //判断是否存在这个文件夹,不存在就进行创建
//        if (!newDir.exists()) {
//            newDir.mkdirs();
//        }

        //3、获取源文件夹下面的所以一级文件对象
        File[] files = file.listFiles();
        //4、判断是否有权限进行访问 和是否是空文件夹
        if (files == null || file.length() == 0) {
            return;
        }

        //4、进行遍历一级文件对象
        for (File file1 : files) {
            //判断是文件还是文件夹
            if (file1.isFile()) {
                //与搜索的文件名进行匹配
                if (file1.getName().contains(fileName)) {
                    copyFileDir(file1.getAbsoluteFile(), new File(dir, file1.getName()));
                } else {
                    //进行递归操作
                    searchFile(file1, dir, fileName);
                }
            }
        }

    }

    private static void copyFileDir(File absoluteFile, File file) throws Exception {
        //1、创建字符输出流与要复制文件接通
        InputStream fis = new FileInputStream(absoluteFile);

        //2、创建字符输出流与要复制到的地方接通
        OutputStream fos = new FileOutputStream(file);

        //3、创建一个桶
        byte[] buffer = new byte[32 * 10];

        //4、开始复制
        int len; //记录读取的字节数
        while ((len = fis.read(buffer)) != -1) {
            //读多少倒多少
            fos.write(buffer, 0, len);
        }

    }
}
